/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.registration.core;

import java.util.Date;

/**
 * @date May 11, 2012
 *
 * @author ggutierrez
 */
public class Attendee extends Person implements Cloneable {

    private String memberId;
    private String nickName;
    private String branch;
    private Category category;
    private Stage currentStage = Stage.PRE_INSCRIPCION;
    private MemberVerification memberVerification;
    private String confirmationNumber;
    private Lodging lodging = new Lodging();
    private Float cost;
    private Float discount;
    private Float finalCost;
    private boolean needTransportation = false;
    private String comments;
    private Date createdDate = new Date();
    private Date modifiedDate = new Date();
    private boolean requireDiploma = false;
    private boolean needDepartureTransportation = false;
    private String verificationCode;
    private boolean printedId = false;
    private boolean expositorPoster = false;
    private boolean expositorArticle = false;
    private String expositionSubject;
    private boolean delegationLeader = false;
    private Attendee leader;
    private Date confirmationDate;
    private PaymentMethod paymentMethod;
    private RoomPlan roomPlan;

    public Attendee() {
    }

    public Attendee(String firstName, String middleName, String lastName, String phone, String email, String memberId, Category category) {
        super(firstName, middleName, lastName, phone, email);
        this.memberId = memberId;
        this.category = category;
    }

    public Attendee(String memberId, Category category) {
        this.memberId = memberId;
        this.category = category;
    }

    public String getMemberId() {
        return memberId;
    }

    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getBranch() {
        return branch;
    }

    public void setBranch(String branch) {
        this.branch = branch;
    }        

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public Stage getCurrentStage() {
        return currentStage;
    }

    public void setCurrentStage(Stage currentStage) {
        this.currentStage = currentStage;
    }

    public MemberVerification getMemberVerification() {
        return memberVerification;
    }

    public void setMemberVerification(MemberVerification memberVerification) {
        this.memberVerification = memberVerification;
    }

    public String getConfirmationNumber() {
        return confirmationNumber;
    }

    public void setConfirmationNumber(String confirmationNumber) {
        this.confirmationNumber = confirmationNumber;
    }

    public Lodging getLodging() {
        return lodging;
    }

    public void setLodging(Lodging lodging) {
        this.lodging = lodging;
    }

    public Float getCost() {
        return cost;
    }

    public void setCost(Float cost) {
        this.cost = cost;
    }

    public Float getDiscount() {
        return discount;
    }

    public void setDiscount(Float discount) {
        this.discount = discount;
    }

    public Float getFinalCost() {
        return finalCost;
    }

    public void setFinalCost(Float finalCost) {
        this.finalCost = finalCost;
    }

    public boolean isNeedTransportation() {
        return needTransportation;
    }

    public void setNeedTransportation(boolean needTransportation) {
        this.needTransportation = needTransportation;
    }

    public String getComments() {
        return comments;
    }

    public void setComments(String comments) {
        this.comments = comments;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    public Date getModifiedDate() {
        return modifiedDate;
    }

    public void setModifiedDate(Date modifiedDate) {
        this.modifiedDate = modifiedDate;
    }

    public boolean isRequireDiploma() {
        return requireDiploma;
    }

    public void setRequireDiploma(boolean requireDiploma) {
        this.requireDiploma = requireDiploma;
    }

    public boolean isNeedDepartureTransportation() {
        return needDepartureTransportation;
    }

    public void setNeedDepartureTransportation(boolean needDepartureTransportation) {
        this.needDepartureTransportation = needDepartureTransportation;
    }

    public String getVerificationCode() {
        return verificationCode;
    }

    public void setVerificationCode(String verificationCode) {
        this.verificationCode = verificationCode;
    }

    public boolean isPrintedId() {
        return printedId;
    }

    public void setPrintedId(boolean printedId) {
        this.printedId = printedId;
    }

    public boolean isExpositorPoster() {
        return expositorPoster;
    }

    public void setExpositorPoster(boolean expositorPoster) {
        this.expositorPoster = expositorPoster;
    }

    public boolean isExpositorArticle() {
        return expositorArticle;
    }

    public void setExpositorArticle(boolean expositorArticle) {
        this.expositorArticle = expositorArticle;
    }        

    public String getExpositionSubject() {
        return expositionSubject;
    }

    public void setExpositionSubject(String expositionSubject) {
        this.expositionSubject = expositionSubject;
    }

    public boolean isDelegationLeader() {
        return delegationLeader;
    }

    public void setDelegationLeader(boolean delegationLeader) {
        this.delegationLeader = delegationLeader;
    }

    public Attendee getLeader() {
        return leader;
    }

    public void setLeader(Attendee leader) {
        this.leader = leader;
    }

    public Date getConfirmationDate() {
        return confirmationDate;
    }

    public void setConfirmationDate(Date confirmationDate) {
        this.confirmationDate = confirmationDate;
    }

    public PaymentMethod getPaymentMethod() {
        return paymentMethod;
    }

    public void setPaymentMethod(PaymentMethod paymentMethod) {
        this.paymentMethod = paymentMethod;
    }

    public RoomPlan getRoomPlan() {
        return roomPlan;
    }

    public void setRoomPlan(RoomPlan roomPlan) {
        this.roomPlan = roomPlan;
    }    
    
    @Override
    public Object clone() throws CloneNotSupportedException {
        Attendee cloned = (Attendee)super.clone();
        
        return cloned;
    }
}
